package Stream;

import java.util.HashSet;
import java.util.Set;

public class Solution {
    public boolean isHappy(int n) {
        // 用集合记录已经出现过的数
        Set<Integer> seen = new HashSet<>();
        // 集合 seen：用于存储每次计算得到的数字，防止陷入无限循环。如果某个数字出现过，就说明进入了循环，返回 false。

        while (n != 1) {
            // 如果已经出现过该数，则说明进入了循环
            if (seen.contains(n)) {
                return false;
            }
            seen.add(n);

            // 计算数字的平方和
            int sum = 0;
            while (n > 0) {
                int digit = n % 10;
                sum += digit * digit;
                n /= 10;
            }
            n = sum;
        }

        return true;  // 最终如果变为 1，返回 true
    }
}
